package com.wlsk.license.service.esign;


import com.alibaba.fastjson.JSONObject;
import com.timevale.esign.sdk.tech.bean.PosBean;
import com.timevale.esign.sdk.tech.bean.SignPDFFileBean;
import com.timevale.esign.sdk.tech.bean.result.FileDigestSignResult;
import com.timevale.esign.sdk.tech.impl.constants.SignType;
import com.timevale.esign.sdk.tech.service.UserSignService;
import com.timevale.esign.sdk.tech.v3.client.ServiceClient;
import com.timevale.esign.sdk.tech.v3.client.ServiceClientManager;
import com.wlsk.license.common.exception.BusinessException;
import com.wlsk.license.config.ESignConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * e钱包签章接口
 */
@Service
@Slf4j
public class ESignService {

    @Resource
    private ESignConfig eSignConfig;
    /**
     * 包车牌签章
     * @return
     */
    public void plateESign(String sealData, String accountId, String srcPdfFile, String dstPdfFile) {
        ESignUtils.registerClientService(eSignConfig);
        ServiceClient getKHD = ServiceClientManager.get(eSignConfig.getProjectId());
        // 平台用户PDF摘要签署服务
        UserSignService userSignService = getKHD.userSignService();
        // 签署文档信息
        SignPDFFileBean file = new SignPDFFileBean();
        file.setSrcPdfFile(srcPdfFile);// 待签署PDF文档本地路径，含文档名（与bytes至少有一个不为空）
        file.setDstPdfFile(dstPdfFile);// 签署后PDF文档本地路径，含文档名（为空时返回签署后的文件流）
        //       file.setFileName("b");// 文档名称，e签宝签署日志对应的文档名，若为空则取文档路径中的名称
        file.setShowImage(false);// 是否增加e签宝logo图标

        // 签章位置信息
        PosBean signPos = new PosBean();
        signPos.setPosType(0);// 定位类型，0-坐标定位，1-关键字定位，默认0，SignType为关键字签署的时候，为1，否则为0。用户可以不作处理。此处只是为了兼容旧版本而保留
        signPos.setPosPage("1");// 签署页码，若为多页签章，支持页码格式“1-3,5,8“，若为坐标定位时，不可空
        signPos.setPosX(400L);// 签署位置X坐标，若为关键字定位，相对于关键字的X坐标偏移量，默认0
        signPos.setPosY(600L);// 签署位置Y坐标，若为关键字定位，相对于关键字的Y坐标偏移量，默认0
        // signPos.setCacellingSign(true);//是否是作废签签署，默认为false;如果签署作废章的话，建议线下也签署一份作废协议，这样法律效力较高
        signPos.setAddSignTime(false);// 是否显示本地签署时间，需要width设置92以上才可以看到时间
        log.info("开始签署文件：accountId-{}, sealData-{}, srcPdfFile-{}, dstPdfFile-{}", accountId, sealData, srcPdfFile, dstPdfFile);
        FileDigestSignResult fileDigestSignResult = userSignService.localSignPDF(accountId, sealData, file, signPos, SignType.Single);
        log.info("结束签署文件: {}",JSONObject.toJSONString(fileDigestSignResult));
        if (fileDigestSignResult.getErrCode() != 0) {
            log.info("包车牌签章失败：{}-{}", fileDigestSignResult.getErrCode(), fileDigestSignResult.getMsg());
           throw new BusinessException("包车牌签章失败");
        }
    }
}
